/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package petstore.view.action.atendimento;

import java.util.Collection;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.Globals;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.validator.DynaValidatorActionForm;
import petstore.view.action.*;
import petstore.business.IComumFacade;
import petstore.model.Animal;
import petstore.model.Atendimento;
import petstore.model.CarteiraVermifugo;

/**
 *
 * @author Tom Hayden
 */
public class ProntuarioVermifugoAction extends CustomDispatchAction {

    private IComumFacade comumFacade;
    
    public void setComumFacade(IComumFacade comumFacade) {
        this.comumFacade = comumFacade;
    }
    public ActionForward novo(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        request.setAttribute("carteiraVermifugo", null);
        return mapping.findForward("mesmaPagina");
    }
    
    public ActionForward selecionarCarteiraVermifugo(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        DynaValidatorActionForm f = (DynaValidatorActionForm) form;
        Animal animal = (Animal) request.getSession().getAttribute("animal");
        request.setAttribute("carteiraVermifugo", this.getCarteiraVermifugoFromAnimal((Integer)f.get("id"), animal));
        return mapping.findForward("mesmaPagina");
    }
    
    public ActionForward salvar(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {

        DynaValidatorActionForm f = (DynaValidatorActionForm) form;
        ActionErrors errors = f.validate(mapping, request);

        if (errors.isEmpty()) {
            Animal animal = (Animal) request.getSession().getAttribute("animal");
            CarteiraVermifugo carteiraVermifugo = this.setCarteiraVermifugo(animal, f, request);
            Integer idAnimal = this.comumFacade.alterarAnimal(animal);
            animal = this.comumFacade.getAnimal(idAnimal);
            request.setAttribute("carteiraVermifugo", carteiraVermifugo);
            request.getSession().setAttribute("animal", animal);
            request.setAttribute("msgSucesso", "true");
        } else {
            request.setAttribute(Globals.ERROR_KEY, errors);
            return mapping.getInputForward();
        }

        return mapping.findForward("mesmaPagina");

    }

    private CarteiraVermifugo setCarteiraVermifugo(Animal animal, DynaValidatorActionForm f, HttpServletRequest request) {
        CarteiraVermifugo carteiraVermifugo = null;
        Integer id = (Integer) f.get("id");
        if (id == null || id.intValue() == 0) {
            carteiraVermifugo = new CarteiraVermifugo();
            Atendimento atendimento = (Atendimento) request.getSession().getAttribute("atendimento");
            carteiraVermifugo.setDataVermifugacao(atendimento.getDataHoraAtendimento());
            carteiraVermifugo.setAnimal(animal);
            animal.getCarteiraVermifugo().add(carteiraVermifugo);
        } else {
            carteiraVermifugo = this.getCarteiraVermifugoFromAnimal(id, animal);
        }
        carteiraVermifugo.setVermifugo(this.comumFacade.getVermifugo((Integer)f.get("idVermifugo")));
        return carteiraVermifugo;
    }

    private CarteiraVermifugo getCarteiraVermifugoFromAnimal(Integer idCarteiraVermifugo, Animal animal) {
        CarteiraVermifugo result = null;
        Collection<CarteiraVermifugo> examesSolicitados = animal.getCarteiraVermifugo();
        for (CarteiraVermifugo carteiraVermifugo : examesSolicitados) {
            if (carteiraVermifugo.getId().equals(idCarteiraVermifugo)) {
                result = carteiraVermifugo;
                break;
            }
        }
        return result;
    }

}
